const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

const clients = new Map(); // 存储所有连接的客户端

// wss.on('connection', (ws, req) => {
//   // 从查询参数中获取用户名
//
//   // const user = new URLSearchParams(req.url.split('?')[1]).get('user');
//   // console.log(`${user} 已连接`);
//   try {
//     // 方法1：使用 URL 类（推荐）
//     const url = new URL(req.url, `http://${req.headers.host}`);
//     let user = url.searchParams.get('user');
//
//     // 方法2：原始字符串解析（备用）
//     if (!user) {
//       const match = req.url.match(/user=([^&]*)/);
//       user = match ? decodeURIComponent(match[1]) : 'unknown';
//     }
//
//     console.log(`${user} 已连接`); // 现在会显示真实用户名
//     clients.set(user, ws);
//
//   } catch (err) {
//     console.error('解析用户失败:', err);
//   }
//
//
//   // 消息处理
//   ws.on('message', (message) => {
//     // try {
//     //   const msg = JSON.parse(message);
//     //   console.log(`收到来自 ${msg.sender} 的消息: ${msg.text}`);
//     //
//     //   // 查找接收者连接
//     //   const receiverWs = clients.get(msg.receiver);
//     //   if (receiverWs) {
//     //     receiverWs.send(JSON.stringify({
//     //       text: msg.text,
//     //       sender: msg.sender
//     //     }));
//     //   }
//     // } catch (error) {
//     //   console.error('消息处理错误:', error);
//     // }
//     try {
//       let msg;
//       try {
//         msg = JSON.parse(message);
//       } catch {
//         // 如果解析失败，说明是纯文本消息
//         msg = {
//           text: message,
//           sender: 'unknown',
//           receiver: 'default'
//         };
//       }
//
//       console.log(`收到来自 ${msg.sender || '未知用户'} 的消息: ${msg.text}`);
//
//       if (msg.receiver) {
//         const receiverWs = clients.get(msg.receiver);
//         receiverWs?.send(JSON.stringify({
//           text: msg.text,
//           sender: msg.sender
//         }));
//       }
//     } catch (error) {
//       console.error('消息处理错误:', error);
//     }
//   });
//
//   // 连接关闭
//   ws.on('close', () => {
//     console.log(`${user} 已断开连接`);
//     clients.delete(user);
//   });
// });


wss.on('connection', (ws, req) => {
  const user = new URL(req.url, `http://${req.headers.host}`).searchParams.get('user');
  console.log(`${user} 已连接`);

  // 存储用户连接
  clients.set(user, ws);

  // 广播用户上线通知（可选）
  broadcast({
    type: 'system',
    text: `${user} 进入聊天室`,
    timestamp: new Date().toISOString()
  });

  ws.on('message', (message) => {
    try {
      const msg = JSON.parse(message);
      console.log(`收到来自 ${msg.sender} 的消息: ${msg.text}`);

      // 广播给所有客户端（包括发送者）
      broadcast({
        type: 'message',
        sender: msg.sender,
        text: msg.text,
        timestamp: new Date().toISOString()
      });
    } catch (error) {
      console.error('消息处理错误:', error);
    }
  });

  // 广播函数
  function broadcast(message) {
    const payload = JSON.stringify(message);
    clients.forEach(client => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(payload);
      }
    });
  }

  ws.on('close', () => {
    clients.delete(user);
    broadcast({
      type: 'system',
      text: `${user} 离开聊天室`,
      timestamp: new Date().toISOString()
    });
  });
});

console.log('WebSocket 服务器正在运行在 ws://localhost:8080');
